package com.hvgroup.modules.sanic.domain.po;

import com.hvgroup.base.BaseEntity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;

import javax.persistence.*;
import java.io.Serializable;

/**
 * 知识库实体类，对应知识库管理模块的数据库表。
 * 包含基础信息、资源配置、大模型平台信息、权限配置等字段。
 */
@EqualsAndHashCode(callSuper = true)
@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "llm_datasets")
public class LlmDataset extends BaseEntity implements Serializable {

    /**
     * 主键ID
     */
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", nullable = false)
    private Long id;

    /** 知识库唯一标识（业务ID） */
    @Column(name = "datasets_id")
    private String datasetsId;

    /** 知识库名称 */
    @Column(name = "name")
    private String name;

    /** 知识库模式（如：向量模式、摘要模式等） */
    @Column(name = "mode")
    private Integer mode;

    /** 状态（0=禁用，1=启用） */
    @Column(name = "state")
    private Integer state;

    /** 是否启用对外 API 接口 */
    @Column(name = "enable_api", nullable = false)
    private Boolean enableApi;

    /** 知识库的 API 访问 Token */
    @Column(name = "api_token")
    private String apiToken;

    /** API 类型（自定义平台定义，如 REST、RPC 等） */
    @Column(name = "api_type")
    private Integer apiType;

    /** 访问密钥（通常与 API Token 配合使用） */
    @Column(name = "access_token")
    private String accessToken;

    /** 知识库描述信息 */
    @Lob
    @Column(name = "description")
    private String description;

    /** 文档上传所需模板ID（下载时使用） */
    @Column(name = "doc_tmpl_id")
    private String docTmplId;

    /** 存储资源类型（例如：MinIO, S3, 本地） */
    @Column(name = "resource_type")
    private Integer resourceType;

    /** 存储资源地址（例如：桶路径、目录路径） */
    @Column(name = "resource_address")
    private String resourceAddress;

    /** 资源访问Key（例如：AK） */
    @Column(name = "resource_ak")
    private String resourceAk;

    /** 资源访问密钥（例如：SK） */
    @Column(name = "resource_sk")
    private String resourceSk;

    /** 所属大模型平台用户ID */
    @Column(name = "llm_user_id")
    private String llmUserId;

    /** 所属大模型平台用户名 */
    @Column(name = "llm_user_name")
    private String llmUserName;

    /** 最后修改人ID（平台侧） */
    @Column(name = "llm_update_id")
    private String llmUpdateId;

    /** 最后修改人用户名（平台侧） */
    @Column(name = "llm_update_name")
    private String llmUpdateName;

    /** 模型类型（如：openai、glm、qwen 等） */
    @Column(name = "llm_type")
    private Integer llmType;
}